package com.horrorshallots.horrorshallotsblog2.deepseek.controller;

import com.horrorshallots.horrorshallotsblog2.deepseek.pojo.Result;
import com.horrorshallots.horrorshallotsblog2.deepseek.service.DialogueService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.Collections;
import java.util.Map;

/**
 * 对话管理控制器
 * 提供对话的创建、继续、查询和结束等RESTful API
 */
@RestController
@RequestMapping("/api/chat")
public class DialogueController {

    private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(DialogueController.class);

    private final DialogueService dialogueService;

    /**
     * 构造函数，依赖注入DialogueService
     * @param dialogueService 对话服务实例
     */
    public DialogueController(DialogueService dialogueService) {
        this.dialogueService = dialogueService;
    }

    /**
     * 创建新对话
     * @param systemPrompt 可选参数，系统提示语（用于设定对话初始行为）
     * @return 包含新会话ID的Result对象
     * @apiNote 示例请求: POST /api/chat/start?systemPrompt=你是一个助手
     */
    @PostMapping(value = "/start", produces = MediaType.APPLICATION_JSON_VALUE)
    public Result startNewConversation(
            @RequestParam(required = false) String systemPrompt) {
        String sessionId = dialogueService.startNewConversation(systemPrompt);
        log.info("创建新会话: {}, 系统提示: {}", sessionId, systemPrompt);
        // 确保返回的是Result对象
        return Result.success(Collections.singletonMap("sessionId", sessionId));
    }

    /**
     * 继续现有对话
     * @param sessionId 会话ID（路径变量）
     * @param userMessage 用户消息（请求体）
     * @return 包含AI回复的Result对象
     * @throws Exception 当会话不存在或API调用失败时抛出异常
     * @apiNote 示例请求: POST /api/chat/continue/123456
     *          请求体: "你好"
     */
    @PostMapping("/continue/{sessionId}")
    public Result continueConversation(
            @PathVariable String sessionId,
            @RequestBody String userMessage) {
        try {
            return Result.success(dialogueService.continueConversation(sessionId, userMessage));
        } catch (Exception e) {
            return Result.error(e.getMessage());
        }
    }

    /**
     * 获取对话历史记录
     * @param sessionId 会话ID（路径变量）
     * @return 包含消息列表的Result对象
     * @apiNote 示例请求: GET /api/chat/history/123456
     */
    @GetMapping("/history/{sessionId}")
    public Result getConversationHistory(
            @PathVariable String sessionId) {
        return Result.success(dialogueService.getConversationHistory(sessionId));
    }

    /**
     * 结束并删除指定对话
     * @param sessionId 会话ID（路径变量）
     * @return 包含操作状态的Result对象
     * @apiNote 示例请求: DELETE /api/chat/end/123456
     */
    @DeleteMapping("/end/{sessionId}")
    public Result endConversation(@PathVariable String sessionId) {
        return Result.success(dialogueService.endConversation(sessionId));
    }
}